﻿/******************************************************************************************************************************

 * @ Original idea by by Binny V A, Original version: 2.00.A 
 * @ http://www.openjs.com/scripts/events/keyboard_shortcuts/
 * @ Original License : BSD
 
 * @ jQuery Plugin by Tzury Bar Yochay 
        mail: tzury.by@gmail.com
        blog: evalinux.wordpress.com
        face: facebook.com/profile.php?id=513676303
        
        (c) Copyrights 2007
        
 * @ jQuery Plugin version Beta (0.0.2)
 * @ License: jQuery-License.
 
TODO:
    add queue support (as in gmail) e.g. 'x' then 'y', etc.
    add mouse + mouse wheel events.

USAGE:
    $.hotkeys.add('Ctrl+c', function(){ alert('copy anyone?');});
    $.hotkeys.add('Ctrl+c', {target:'div#editor', type:'keyup', propagate: true},function(){ alert('copy anyone?');});>
    $.hotkeys.remove('Ctrl+c'); 
    $.hotkeys.remove('Ctrl+c', {target:'div#editor', type:'keypress'}); 
    
******************************************************************************************************************************/
(function (jQuery) {
    this.version = '(beta)(0.0.3)';
    this.all = {};
    this.special_keys = {
        27: 'esc', 9: 'tab', 32: 'space', 13: 'return', 8: 'backspace', 145: 'scroll', 20: 'capslock',
        144: 'numlock', 19: 'pause', 45: 'insert', 36: 'home', 46: 'del', 35: 'end', 33: 'pageup',
        34: 'pagedown', 37: 'left', 38: 'up', 39: 'right', 40: 'down', 112: 'f1', 113: 'f2', 114: 'f3',
        115: 'f4', 116: 'f5', 117: 'f6', 118: 'f7', 119: 'f8', 120: 'f9', 121: 'f10', 122: 'f11', 123: 'f12'
    };

    this.shift_nums = {
        "`": "~", "1": "!", "2": "@", "3": "#", "4": "$", "5": "%", "6": "^", "7": "&",
        "8": "*", "9": "(", "0": ")", "-": "_", "=": "+", ";": ":", "'": "\"", ",": "<",
        ".": ">", "/": "?", "\\": "|"
    };

    this.add = function (combi, options, callback) {
        if (jQuery.isFunction(options)) {
            callback = options;
            options = {};
        }
        var opt = {},
            defaults = { type: 'keydown', propagate: false, disableInInput: false, target: jQuery('html')[0], checkParent: true },
            that = this;
        opt = jQuery.extend(opt, defaults, options || {});
        combi = combi.toLowerCase();

        // inspect if keystroke matches
        var inspector = function (event) {
            event = jQuery.event.fix(event); // jQuery event normalization.
            var element = event.target;
            // @ TextNode -> nodeType == 3
            element = (element.nodeType == 3) ? element.parentNode : element;

            if (opt['disableInInput']) { // Disable shortcut keys in Input, Textarea fields
                var target = jQuery(element);
                if (target.is("input") || target.is("textarea")) {
                    return;
                }
            }
            var code = event.which,
                type = event.type,
                character = String.fromCharCode(code).toLowerCase(),
                special = that.special_keys[code],
                shift = event.shiftKey,
                ctrl = event.ctrlKey,
                alt = event.altKey,
                propagate = true, // default behaivour
                mapPoint = null;

            // in opera + safari, the event.target is unpredictable.
            // for example: 'keydown' might be associated with HtmlBodyElement 
            // or the element where you last clicked with your mouse.
            if (jQuery.browser.opera || jQuery.browser.safari || opt.checkParent) {
                while (!that.all[element] && element.parentNode) {
                    element = element.parentNode;
                }
            }

            var cbMap = that.all[element].events[type].callbackMap;
            if (!shift && !ctrl && !alt) { // No Modifiers
                mapPoint = cbMap[special] || cbMap[character]
            }
                // deals with combinaitons (alt|ctrl|shift+anything)
            else {
                var modif = '';
                if (alt) modif += 'alt+';
                if (ctrl) modif += 'ctrl+';
                if (shift) modif += 'shift+';
                // modifiers + special keys or modifiers + characters or modifiers + shift characters
                mapPoint = cbMap[modif + special] || cbMap[modif + character] || cbMap[modif + that.shift_nums[character]]
            }
            if (mapPoint) {
                mapPoint.cb(event);
                if (!mapPoint.propagate) {
                    event.stopPropagation();
                    event.preventDefault();
                    return false;
                }
            }
        };
        // first hook for this element
        if (!this.all[opt.target]) {
            this.all[opt.target] = { events: {} };
        }
        if (!this.all[opt.target].events[opt.type]) {
            this.all[opt.target].events[opt.type] = { callbackMap: {} }
            jQuery.event.add(opt.target, opt.type, inspector);
        }
        this.all[opt.target].events[opt.type].callbackMap[combi] = { cb: callback, propagate: opt.propagate };
        return jQuery;
    };
    this.remove = function (exp, opt) {
        opt = opt || {};
        target = opt.target || jQuery('html')[0];
        type = opt.type || 'keydown';
        exp = exp.toLowerCase();
        delete this.all[target].events[type].callbackMap[exp]
        return jQuery;
    };
    jQuery.hotkeys = this;
    return jQuery;
})(jQuery);


/* sample
            //This page is a result of an autogenerated content made by running test.html with firefox.
            function domo(){
                jQuery('#platform-details').html('<code>' + navigator.userAgent + '</code>');
                jQuery.hotkeys.add('esc',function (){jQuery('#_esc').addClass('dirty')});
                jQuery.hotkeys.add('tab',function (){jQuery('#_tab').addClass('dirty')});
                jQuery.hotkeys.add('space',function (){jQuery('#_space').addClass('dirty')});
                jQuery.hotkeys.add('return',function (){jQuery('#_return').addClass('dirty')});
                jQuery.hotkeys.add('backspace',function (){jQuery('#_backspace').addClass('dirty')});
                jQuery.hotkeys.add('scroll',function (){jQuery('#_scroll').addClass('dirty')});
                jQuery.hotkeys.add('capslock',function (){jQuery('#_capslock').addClass('dirty')});
                jQuery.hotkeys.add('numlock',function (){jQuery('#_numlock').addClass('dirty')});
                jQuery.hotkeys.add('pause',function (){jQuery('#_pause').addClass('dirty')});
                jQuery.hotkeys.add('insert',function (){jQuery('#_insert').addClass('dirty')});
                jQuery.hotkeys.add('home',function (){jQuery('#_home').addClass('dirty')});
                jQuery.hotkeys.add('del',function (){jQuery('#_del').addClass('dirty')});
                jQuery.hotkeys.add('end',function (){jQuery('#_end').addClass('dirty')});
                jQuery.hotkeys.add('pageup',function (){jQuery('#_pageup').addClass('dirty')});
                jQuery.hotkeys.add('pagedown',function (){jQuery('#_pagedown').addClass('dirty')});
                jQuery.hotkeys.add('left',function (){jQuery('#_left').addClass('dirty')});
                jQuery.hotkeys.add('up',function (){jQuery('#_up').addClass('dirty')});
                jQuery.hotkeys.add('right',function (){jQuery('#_right').addClass('dirty')});
                jQuery.hotkeys.add('down',function (){jQuery('#_down').addClass('dirty')});
                jQuery.hotkeys.add('f1',function (){jQuery('#_f1').addClass('dirty')});
                jQuery.hotkeys.add('f2',function (){jQuery('#_f2').addClass('dirty')});
                jQuery.hotkeys.add('f3',function (){jQuery('#_f3').addClass('dirty')});
                jQuery.hotkeys.add('f4',function (){jQuery('#_f4').addClass('dirty')});
                jQuery.hotkeys.add('f5',function (){jQuery('#_f5').addClass('dirty')});
                jQuery.hotkeys.add('f6',function (){jQuery('#_f6').addClass('dirty')});
                jQuery.hotkeys.add('f7',function (){jQuery('#_f7').addClass('dirty')});
                jQuery.hotkeys.add('f8',function (){jQuery('#_f8').addClass('dirty')});
                jQuery.hotkeys.add('f9',function (){jQuery('#_f9').addClass('dirty')});
                jQuery.hotkeys.add('f10',function (){jQuery('#_f10').addClass('dirty')});
                jQuery.hotkeys.add('f11',function (){jQuery('#_f11').addClass('dirty')});
                jQuery.hotkeys.add('f12',function (){jQuery('#_f12').addClass('dirty')});
                jQuery.hotkeys.add('a',function (){jQuery('#_a').addClass('dirty')});
                jQuery.hotkeys.add('b',function (){jQuery('#_b').addClass('dirty')});
                jQuery.hotkeys.add('c',function (){jQuery('#_c').addClass('dirty')});
                jQuery.hotkeys.add('d',function (){jQuery('#_d').addClass('dirty')});
                jQuery.hotkeys.add('e',function (){jQuery('#_e').addClass('dirty')});
                jQuery.hotkeys.add('f',function (){jQuery('#_f').addClass('dirty')});
                jQuery.hotkeys.add('g',function (){jQuery('#_g').addClass('dirty')});
                jQuery.hotkeys.add('h',function (){jQuery('#_h').addClass('dirty')});
                jQuery.hotkeys.add('i',function (){jQuery('#_i').addClass('dirty')});
                jQuery.hotkeys.add('j',function (){jQuery('#_j').addClass('dirty')});
                jQuery.hotkeys.add('k',function (){jQuery('#_k').addClass('dirty')});
                jQuery.hotkeys.add('l',function (){jQuery('#_l').addClass('dirty')});
                jQuery.hotkeys.add('m',function (){jQuery('#_m').addClass('dirty')});
                jQuery.hotkeys.add('n',function (){jQuery('#_n').addClass('dirty')});
                jQuery.hotkeys.add('o',function (){jQuery('#_o').addClass('dirty')});
                jQuery.hotkeys.add('p',function (){jQuery('#_p').addClass('dirty')});
                jQuery.hotkeys.add('q',function (){jQuery('#_q').addClass('dirty')});
                jQuery.hotkeys.add('r',function (){jQuery('#_r').addClass('dirty')});
                jQuery.hotkeys.add('s',function (){jQuery('#_s').addClass('dirty')});
                jQuery.hotkeys.add('t',function (){jQuery('#_t').addClass('dirty')});
                jQuery.hotkeys.add('u',function (){jQuery('#_u').addClass('dirty')});
                jQuery.hotkeys.add('v',function (){jQuery('#_v').addClass('dirty')});
                jQuery.hotkeys.add('w',function (){jQuery('#_w').addClass('dirty')});
                jQuery.hotkeys.add('x',function (){jQuery('#_x').addClass('dirty')});
                jQuery.hotkeys.add('y',function (){jQuery('#_y').addClass('dirty')});
                jQuery.hotkeys.add('z',function (){jQuery('#_z').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+a',function (){jQuery('#_Ctrl_a').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+b',function (){jQuery('#_Ctrl_b').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+c',function (){jQuery('#_Ctrl_c').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+d',function (){jQuery('#_Ctrl_d').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+e',function (){jQuery('#_Ctrl_e').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+f',function (){jQuery('#_Ctrl_f').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+g',function (){jQuery('#_Ctrl_g').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+h',function (){jQuery('#_Ctrl_h').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+i',function (){jQuery('#_Ctrl_i').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+j',function (){jQuery('#_Ctrl_j').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+k',function (){jQuery('#_Ctrl_k').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+l',function (){jQuery('#_Ctrl_l').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+m',function (){jQuery('#_Ctrl_m').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+n',function (){jQuery('#_Ctrl_n').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+o',function (){jQuery('#_Ctrl_o').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+p',function (){jQuery('#_Ctrl_p').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+q',function (){jQuery('#_Ctrl_q').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+r',function (){jQuery('#_Ctrl_r').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+s',function (){jQuery('#_Ctrl_s').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+t',function (){jQuery('#_Ctrl_t').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+u',function (){jQuery('#_Ctrl_u').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+v',function (){jQuery('#_Ctrl_v').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+w',function (){jQuery('#_Ctrl_w').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+x',function (){jQuery('#_Ctrl_x').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+y',function (){jQuery('#_Ctrl_y').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+z',function (){jQuery('#_Ctrl_z').addClass('dirty')});
                jQuery.hotkeys.add('Shift+a',function (){jQuery('#_Shift_a').addClass('dirty')});
                jQuery.hotkeys.add('Shift+b',function (){jQuery('#_Shift_b').addClass('dirty')});
                jQuery.hotkeys.add('Shift+c',function (){jQuery('#_Shift_c').addClass('dirty')});
                jQuery.hotkeys.add('Shift+d',function (){jQuery('#_Shift_d').addClass('dirty')});
                jQuery.hotkeys.add('Shift+e',function (){jQuery('#_Shift_e').addClass('dirty')});
                jQuery.hotkeys.add('Shift+f',function (){jQuery('#_Shift_f').addClass('dirty')});
                jQuery.hotkeys.add('Shift+g',function (){jQuery('#_Shift_g').addClass('dirty')});
                jQuery.hotkeys.add('Shift+h',function (){jQuery('#_Shift_h').addClass('dirty')});
                jQuery.hotkeys.add('Shift+i',function (){jQuery('#_Shift_i').addClass('dirty')});
                jQuery.hotkeys.add('Shift+j',function (){jQuery('#_Shift_j').addClass('dirty')});
                jQuery.hotkeys.add('Shift+k',function (){jQuery('#_Shift_k').addClass('dirty')});
                jQuery.hotkeys.add('Shift+l',function (){jQuery('#_Shift_l').addClass('dirty')});
                jQuery.hotkeys.add('Shift+m',function (){jQuery('#_Shift_m').addClass('dirty')});
                jQuery.hotkeys.add('Shift+n',function (){jQuery('#_Shift_n').addClass('dirty')});
                jQuery.hotkeys.add('Shift+o',function (){jQuery('#_Shift_o').addClass('dirty')});
                jQuery.hotkeys.add('Shift+p',function (){jQuery('#_Shift_p').addClass('dirty')});
                jQuery.hotkeys.add('Shift+q',function (){jQuery('#_Shift_q').addClass('dirty')});
                jQuery.hotkeys.add('Shift+r',function (){jQuery('#_Shift_r').addClass('dirty')});
                jQuery.hotkeys.add('Shift+s',function (){jQuery('#_Shift_s').addClass('dirty')});
                jQuery.hotkeys.add('Shift+t',function (){jQuery('#_Shift_t').addClass('dirty')});
                jQuery.hotkeys.add('Shift+u',function (){jQuery('#_Shift_u').addClass('dirty')});
                jQuery.hotkeys.add('Shift+v',function (){jQuery('#_Shift_v').addClass('dirty')});
                jQuery.hotkeys.add('Shift+w',function (){jQuery('#_Shift_w').addClass('dirty')});
                jQuery.hotkeys.add('Shift+x',function (){jQuery('#_Shift_x').addClass('dirty')});
                jQuery.hotkeys.add('Shift+y',function (){jQuery('#_Shift_y').addClass('dirty')});
                jQuery.hotkeys.add('Shift+z',function (){jQuery('#_Shift_z').addClass('dirty')});
                jQuery.hotkeys.add('Alt+a',function (){jQuery('#_Alt_a').addClass('dirty')});
                jQuery.hotkeys.add('Alt+b',function (){jQuery('#_Alt_b').addClass('dirty')});
                jQuery.hotkeys.add('Alt+c',function (){jQuery('#_Alt_c').addClass('dirty')});
                jQuery.hotkeys.add('Alt+d',function (){jQuery('#_Alt_d').addClass('dirty')});
                jQuery.hotkeys.add('Alt+e',function (){jQuery('#_Alt_e').addClass('dirty')});
                jQuery.hotkeys.add('Alt+f',function (){jQuery('#_Alt_f').addClass('dirty')});
                jQuery.hotkeys.add('Alt+g',function (){jQuery('#_Alt_g').addClass('dirty')});
                jQuery.hotkeys.add('Alt+h',function (){jQuery('#_Alt_h').addClass('dirty')});
                jQuery.hotkeys.add('Alt+i',function (){jQuery('#_Alt_i').addClass('dirty')});
                jQuery.hotkeys.add('Alt+j',function (){jQuery('#_Alt_j').addClass('dirty')});
                jQuery.hotkeys.add('Alt+k',function (){jQuery('#_Alt_k').addClass('dirty')});
                jQuery.hotkeys.add('Alt+l',function (){jQuery('#_Alt_l').addClass('dirty')});
                jQuery.hotkeys.add('Alt+m',function (){jQuery('#_Alt_m').addClass('dirty')});
                jQuery.hotkeys.add('Alt+n',function (){jQuery('#_Alt_n').addClass('dirty')});
                jQuery.hotkeys.add('Alt+o',function (){jQuery('#_Alt_o').addClass('dirty')});
                jQuery.hotkeys.add('Alt+p',function (){jQuery('#_Alt_p').addClass('dirty')});
                jQuery.hotkeys.add('Alt+q',function (){jQuery('#_Alt_q').addClass('dirty')});
                jQuery.hotkeys.add('Alt+r',function (){jQuery('#_Alt_r').addClass('dirty')});
                jQuery.hotkeys.add('Alt+s',function (){jQuery('#_Alt_s').addClass('dirty')});
                jQuery.hotkeys.add('Alt+t',function (){jQuery('#_Alt_t').addClass('dirty')});
                jQuery.hotkeys.add('Alt+u',function (){jQuery('#_Alt_u').addClass('dirty')});
                jQuery.hotkeys.add('Alt+v',function (){jQuery('#_Alt_v').addClass('dirty')});
                jQuery.hotkeys.add('Alt+w',function (){jQuery('#_Alt_w').addClass('dirty')});
                jQuery.hotkeys.add('Alt+x',function (){jQuery('#_Alt_x').addClass('dirty')});
                jQuery.hotkeys.add('Alt+y',function (){jQuery('#_Alt_y').addClass('dirty')});
                jQuery.hotkeys.add('Alt+z',function (){jQuery('#_Alt_z').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+esc', function (){jQuery('#_Ctrl_esc').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+tab', function (){jQuery('#_Ctrl_tab').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+space', function (){jQuery('#_Ctrl_space').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+return', function (){jQuery('#_Ctrl_return').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+backspace', function (){jQuery('#_Ctrl_backspace').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+scroll', function (){jQuery('#_Ctrl_scroll').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+capslock', function (){jQuery('#_Ctrl_capslock').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+numlock', function (){jQuery('#_Ctrl_numlock').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+pause', function (){jQuery('#_Ctrl_pause').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+insert', function (){jQuery('#_Ctrl_insert').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+home', function (){jQuery('#_Ctrl_home').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+del', function (){jQuery('#_Ctrl_del').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+end', function (){jQuery('#_Ctrl_end').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+pageup', function (){jQuery('#_Ctrl_pageup').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+pagedown', function (){jQuery('#_Ctrl_pagedown').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+left', function (){jQuery('#_Ctrl_left').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+up', function (){jQuery('#_Ctrl_up').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+right', function (){jQuery('#_Ctrl_right').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+down', function (){jQuery('#_Ctrl_down').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+f1', function (){jQuery('#_Ctrl_f1').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+f2', function (){jQuery('#_Ctrl_f2').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+f3', function (){jQuery('#_Ctrl_f3').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+f4', function (){jQuery('#_Ctrl_f4').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+f5', function (){jQuery('#_Ctrl_f5').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+f6', function (){jQuery('#_Ctrl_f6').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+f7', function (){jQuery('#_Ctrl_f7').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+f8', function (){jQuery('#_Ctrl_f8').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+f9', function (){jQuery('#_Ctrl_f9').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+f10', function (){jQuery('#_Ctrl_f10').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+f11', function (){jQuery('#_Ctrl_f11').addClass('dirty')});
                jQuery.hotkeys.add('Ctrl+f12', function (){jQuery('#_Ctrl_f12').addClass('dirty')});
                jQuery.hotkeys.add('Shift+esc', function (){jQuery('#_Shift_esc').addClass('dirty')});
                jQuery.hotkeys.add('Shift+tab', function (){jQuery('#_Shift_tab').addClass('dirty')});
                jQuery.hotkeys.add('Shift+space', function (){jQuery('#_Shift_space').addClass('dirty')});
                jQuery.hotkeys.add('Shift+return', function (){jQuery('#_Shift_return').addClass('dirty')});
                jQuery.hotkeys.add('Shift+backspace', function (){jQuery('#_Shift_backspace').addClass('dirty')});
                jQuery.hotkeys.add('Shift+scroll', function (){jQuery('#_Shift_scroll').addClass('dirty')});
                jQuery.hotkeys.add('Shift+capslock', function (){jQuery('#_Shift_capslock').addClass('dirty')});
                jQuery.hotkeys.add('Shift+numlock', function (){jQuery('#_Shift_numlock').addClass('dirty')});
                jQuery.hotkeys.add('Shift+pause', function (){jQuery('#_Shift_pause').addClass('dirty')});
                jQuery.hotkeys.add('Shift+insert', function (){jQuery('#_Shift_insert').addClass('dirty')});
                jQuery.hotkeys.add('Shift+home', function (){jQuery('#_Shift_home').addClass('dirty')});
                jQuery.hotkeys.add('Shift+del', function (){jQuery('#_Shift_del').addClass('dirty')});
                jQuery.hotkeys.add('Shift+end', function (){jQuery('#_Shift_end').addClass('dirty')});
                jQuery.hotkeys.add('Shift+pageup', function (){jQuery('#_Shift_pageup').addClass('dirty')});
                jQuery.hotkeys.add('Shift+pagedown', function (){jQuery('#_Shift_pagedown').addClass('dirty')});
                jQuery.hotkeys.add('Shift+left', function (){jQuery('#_Shift_left').addClass('dirty')});
                jQuery.hotkeys.add('Shift+up', function (){jQuery('#_Shift_up').addClass('dirty')});
                jQuery.hotkeys.add('Shift+right', function (){jQuery('#_Shift_right').addClass('dirty')});
                jQuery.hotkeys.add('Shift+down', function (){jQuery('#_Shift_down').addClass('dirty')});
                jQuery.hotkeys.add('Shift+f1', function (){jQuery('#_Shift_f1').addClass('dirty')});
                jQuery.hotkeys.add('Shift+f2', function (){jQuery('#_Shift_f2').addClass('dirty')});
                jQuery.hotkeys.add('Shift+f3', function (){jQuery('#_Shift_f3').addClass('dirty')});
                jQuery.hotkeys.add('Shift+f4', function (){jQuery('#_Shift_f4').addClass('dirty')});
                jQuery.hotkeys.add('Shift+f5', function (){jQuery('#_Shift_f5').addClass('dirty')});
                jQuery.hotkeys.add('Shift+f6', function (){jQuery('#_Shift_f6').addClass('dirty')});
                jQuery.hotkeys.add('Shift+f7', function (){jQuery('#_Shift_f7').addClass('dirty')});
                jQuery.hotkeys.add('Shift+f8', function (){jQuery('#_Shift_f8').addClass('dirty')});
                jQuery.hotkeys.add('Shift+f9', function (){jQuery('#_Shift_f9').addClass('dirty')});
                jQuery.hotkeys.add('Shift+f10', function (){jQuery('#_Shift_f10').addClass('dirty')});
                jQuery.hotkeys.add('Shift+f11', function (){jQuery('#_Shift_f11').addClass('dirty')});
                jQuery.hotkeys.add('Shift+f12', function (){jQuery('#_Shift_f12').addClass('dirty')});
                jQuery.hotkeys.add('Alt+esc', function (){jQuery('#_Alt_esc').addClass('dirty')});
                jQuery.hotkeys.add('Alt+tab', function (){jQuery('#_Alt_tab').addClass('dirty')});
                jQuery.hotkeys.add('Alt+space', function (){jQuery('#_Alt_space').addClass('dirty')});
                jQuery.hotkeys.add('Alt+return', function (){jQuery('#_Alt_return').addClass('dirty')});
                jQuery.hotkeys.add('Alt+backspace', function (){jQuery('#_Alt_backspace').addClass('dirty')});
                jQuery.hotkeys.add('Alt+scroll', function (){jQuery('#_Alt_scroll').addClass('dirty')});
                jQuery.hotkeys.add('Alt+capslock', function (){jQuery('#_Alt_capslock').addClass('dirty')});
                jQuery.hotkeys.add('Alt+numlock', function (){jQuery('#_Alt_numlock').addClass('dirty')});
                jQuery.hotkeys.add('Alt+pause', function (){jQuery('#_Alt_pause').addClass('dirty')});
                jQuery.hotkeys.add('Alt+insert', function (){jQuery('#_Alt_insert').addClass('dirty')});
                jQuery.hotkeys.add('Alt+home', function (){jQuery('#_Alt_home').addClass('dirty')});
                jQuery.hotkeys.add('Alt+del', function (){jQuery('#_Alt_del').addClass('dirty')});
                jQuery.hotkeys.add('Alt+end', function (){jQuery('#_Alt_end').addClass('dirty')});
                jQuery.hotkeys.add('Alt+pageup', function (){jQuery('#_Alt_pageup').addClass('dirty')});
                jQuery.hotkeys.add('Alt+pagedown', function (){jQuery('#_Alt_pagedown').addClass('dirty')});
                jQuery.hotkeys.add('Alt+left', function (){jQuery('#_Alt_left').addClass('dirty')});
                jQuery.hotkeys.add('Alt+up', function (){jQuery('#_Alt_up').addClass('dirty')});
                jQuery.hotkeys.add('Alt+right', function (){jQuery('#_Alt_right').addClass('dirty')});
                jQuery.hotkeys.add('Alt+down', function (){jQuery('#_Alt_down').addClass('dirty')});
                jQuery.hotkeys.add('Alt+f1', function (){jQuery('#_Alt_f1').addClass('dirty')});
                jQuery.hotkeys.add('Alt+f2', function (){jQuery('#_Alt_f2').addClass('dirty')});
                jQuery.hotkeys.add('Alt+f3', function (){jQuery('#_Alt_f3').addClass('dirty')});
                jQuery.hotkeys.add('Alt+f4', function (){jQuery('#_Alt_f4').addClass('dirty')});
                jQuery.hotkeys.add('Alt+f5', function (){jQuery('#_Alt_f5').addClass('dirty')});
                jQuery.hotkeys.add('Alt+f6', function (){jQuery('#_Alt_f6').addClass('dirty')});
                jQuery.hotkeys.add('Alt+f7', function (){jQuery('#_Alt_f7').addClass('dirty')});
                jQuery.hotkeys.add('Alt+f8', function (){jQuery('#_Alt_f8').addClass('dirty')});
                jQuery.hotkeys.add('Alt+f9', function (){jQuery('#_Alt_f9').addClass('dirty')});
                jQuery.hotkeys.add('Alt+f10', function (){jQuery('#_Alt_f10').addClass('dirty')});
                jQuery.hotkeys.add('Alt+f11', function (){jQuery('#_Alt_f11').addClass('dirty')});
                jQuery.hotkeys.add('Alt+f12', function (){jQuery('#_Alt_f12').addClass('dirty')});
            }
            
            
            jQuery(document).ready(domo);

*/